参数和返回类型也可以多态!
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
如果你声明一个父类的引用变量,比如说Animal,并赋子类对象给它,假设是Dog,想象—下此变量被当作方法的参数时会如何运作……
class Vet {
public void giveShot(Animal a) {
/*a参数可以用任何Animal的类型对象来传入。执行到makeNoise()的时候,不管它引用的对象到底是什么,该对象都会执行makeNoise()*/
a.makeNoise();
}
}
class PetOwner {
public void start() {
Vet v = new vet();
Dog d = new Dog();
Hippo h = new Hippo();
/*giveShot这个方法可以接收任何一种Animal的引用。只要所传入的是Animal的子类它都能执行*/
v.giveShot(d); //会执行Dog的makeNoise()
v.giveShot(h); //会执行Hippo的makeNoise()
}
}
通过多态,你就可以编写出引进新型子类时也不必修改的程序。来看Vet这个类,如果你使用Animal类型来声明它的参数,则程序代码就可以处理所有Animal的子类,这意味着其他人只要注意到要扩充过Animal就可以利用你的Vet。
在线练习
{$ activeFileHint $}